package day05;

/*
包装类：
   byte  1 ---> Byte
   short 2 ---> Short
   int   4 ---> Integer
   long  8 ---> Long
   char  2 ---> Character
   float 4 ---> Float
   double 8 ---> Double
   boolean 1 ---> Boolean

   每个基本类型对应一个包装类型。
   基本类型不具备面向对象的机制，包装类是面向对象的，提供了一些方法便于操作。
   集合（列表、集合、Map）中不允许存放基本类型的数据，只能用包装类。

 */
public class Demo05 {
    public static void main(String[] args) {
        // 构造方法创建一个对象。
        Integer n = new Integer(10);

        // 自动装箱：int-->Integer类型
        Integer a = 10; // Integer与int类型的值可以相互转换。
        // 自动拆箱：Integer-->int类型
        int b = a;

        Float f = 10.3f;
        float g = f;

        System.out.println(n.toString());
        // 整数或字符串转成Integer类型的
        System.out.println(Integer.valueOf("10"));
        // radix 进制，表示第一个参数是进制的，默认是10进制
        System.out.println(Integer.valueOf("10", 8));
        // 最小进制：2，最大进制：36, 0~9 10个数字，a-z 26个字母
        System.out.println(Integer.valueOf("FFFEEE", 16));
        // 将字符串转成int类型
        System.out.println(Integer.parseInt("FFFEEE", 16));


        // 调用方法，验证是否正确，边界值、等价类设计用例
        // 长度最大值：7
        System.out.println(oct2dec("7776667"));
        // 长度最小值：1
        System.out.println(oct2dec("0"));
        // 最大值：
        System.out.println(oct2dec("7777777"));
        // 最小值：
        System.out.println(oct2dec("-777777"));
        // 异常：非法的八进制数字
        System.out.println(oct2dec("8123"));
        // 异常：空值
        System.out.println(oct2dec(null));
        // 异常：长度超过7
        System.out.println(oct2dec("12345671"));
        // 异常：长度小于1
        System.out.println(oct2dec(""));

        int num1 = 10;
        int num2 = 0b111101; // 0b开头，二进制数字
        int num3 = 07777; // 0开头，八进制数字
        int num4 = 0xfffee;//0x开头，十六进制数字

        System.out.println("转十六进制：" + Integer.toHexString(100));
        System.out.println("转八进制：" + Integer.toOctalString(100));
        System.out.println("转二进制：" + Integer.toBinaryString(100));

        // Float

    }

    /*
    练习：定义一个静态的方法，把一个长度小于等于7的8进制数字转成10进制数字。
    参数检查、异常处理
     */
    public static int oct2dec(String oct) { // 形式参数
        if (oct == null) {
            System.out.println("参数为null");
            return 0;
        }
        if (oct.length() <= 0 || oct.length() > 7) {
            System.out.println("参数不正确");
            return 0;
        }
        try {
            return Integer.parseInt(oct, 8);
        } catch (Exception e) {
            System.out.println("非法的八进制数字");
            return 0;
        }
    }
}
